<?php
/**
 * egpusersUpload.php
 * 
 * (C) 2009, tetsuya.odaka(EzoGP).
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* 
 * アップロードされたCSVファイルをもとにEGP_USERSを登録更新する。
 * エラーのあるレコードは処理スキップし、メッセージとして表示する。
 * 
 * 	author	tetsuya.odaka
 * 	date	2009/6/3
 * 
*/
	// 前準備
	include("../Myznala/myHeader.inc.php");
	require_once('../Myznala/MyDBConnection.class.php');
	
	/*
	 * 変数定義
	 */
	// 遷移先のテンプレート名
	$myTemplate="../examples-egpusers/templates/egpusersUpload.tpl";
	
	/*
	 * 添付ファイルの処理
	   * 　　送信されたファイルを一時ファイルに保存し、
	 *   そこからデータを配列に読み込む。
	 */
	$app_path = APP_PATH;
	$save_dir = $app_path."/tmp/";
	$filename = $_FILES["upfile"]["name"];
	$eArr = array();
	if($_FILES["upfile"]["tmp_name"] == null){
		$eObj=new ErrorBean();
		$eObj->setField("アップロードファイル");
		$eObj->setMessage("入力してください。");
		$eArr[0]=$eObj;
	}
	
	// 一時ファイルをセーブする。
	if(!move_uploaded_file($_FILES["upfile"]["tmp_name"],$save_dir.$filename)){
		$eObj=new ErrorBean();
		$eObj->setField("アップロードファイル");
		$eObj->setMessage("処理に失敗しました。");
		$eArr[1]=$eObj;
	}

	// エラーがあれば、入力画面にもどす。
	if(count($eArr) > 0){
		$myTplData=array(
				'myLoginUser'		=>$myLoginUser,
				'myAppName'	=>'examples-egpusers',
				'myPageTitle'	=>'EGPUSERS_Batch',
		
				'myErrArray'	=>$eArr,
				'button_array'	=>initButton()
		);
		
		// 後処理
		include("../Myznala/myFooter.inc.php");
		return; 
	}
	
	// 送信ファイルの読み込み
	$file=fopen($save_dir.$filename,"r");
	$i = 0;
	$dArr = array();
	while($result = fgetcsv($file,1024,',')){
		if(count($result)==5){
			$dArr[$i]=$result;
			$i++;
		}
	}
	fclose($file);
	// ファイル削除
	unlink($save_dir.$filename); 
	
	/*
	 * データの登録・更新処理
	   * 　　上で作成した配列をもとに、データを登録更新する。
	 */

	//コネクションの取得
	$cObj = new MyDBConnection();
	$conn=$cObj->getConnection();
	
	// 読み込んだ行ごとに、内部関数（entry）でデータの登録更新をする。
	for($i=0; $i < count($dArr); $i++){
		
		// データの登録
		$seq = $i+1;
		$msgArr = array();
		// 登録・更新とエラーメッセージの取得
		$msgArr = entry($conn, $dArr[$i], $seq);
		
		// メッセージのマージ
		if(count($msgArr) > 0){
			$start = count($mArr);
			$end = $start+count($msgArr);
			$j=0;
			for($i=$start; $i<$end; $i++){
				$mArr[$i]=$msgArr[$j];
				$j++;
			}
		}
	}
	
	// コネクションの解放
	$cObj->closeConnection($conn); // connectionのリリース
	
	// 正常終了メッセージ
	$msgObj=new MsgBean();
	$msgObj->setMessage("処理が終了しました。");
	$message_count=count($mArr);
	$mArr[$message_count+1]=$msgObj;

	$myTplData=array(
			'myLoginUser'=>$myLoginUser,
			'myAppName'=>'examples-dwoo2',
			'myPageTitle'=>'Shain_Batch',
	
			'myMsgArray'=>$mArr,
			'button_array'=>initButton()
	);

	// 後処理
	include("../Myznala/myFooter.inc.php");
		
	return;
	
	/*  
	 * 各読み込み行に対する処理；入力チェックを行ったのちに登録更新を行う。
	*/
	function entry($conn, $rowData, $seq){
		require_once("../Myznala/MyConverter.class.php");
		require_once('EgpusersDao.class.php');
		require('../Myznala/debugLog.php');
		
		/* データにnull値があった場合にデフォルト値を設定し、データに入力があった
	　　 	場合にはサニタイズする。
		*/
		$vArr = array();
		$cObj = new MyConverter();
		
		// E-mail
		$wrk = $cObj->sanitize($rowData[0],"SJIS");
		$vArr[0]=$wrk;
		
		// Password
		$wrk = $cObj->sanitize($rowData[1],"SJIS");
		$vArr[1]=$wrk;
		
		// 名前
		$wrk = $cObj->sanitize($rowData[2],"SJIS");
		$vArr[2]=$wrk;
		
		// validation
		$eArr = array();
		$eArr = validate($vArr, $seq);
		
//		var_dump($eArr);
		
		/*
		 * エラーチェック
		 *  エラーがあったら処理をスキップする。
		 */
		if(count($eArr) == 0){
			/* データにnull値があった場合にデフォルト値を設定し、データに入力があった
	　　 		場合にはサニタイズする。*/
			$egpObj=new EgpusersDao();
			
			// Emailで登録か、更新かを決める
			$email = mb_convert_encoding($rowData[0],"UTF-8","Shift_JIS");
			$egpObj->setEmail($email);
//			$rObj = isEntry($conn, $email);
			$rArr=array();
			$rArr=$egpObj->findByEmail($conn);
	
//			var_dump($egpObj);
					
			if($rArr == null || count($rArr)==0){
				// id
				$wrk = $egpObj->getNewId($conn);
				$egpObj->setId($wrk);
				
				// Email
				$wMail = mb_convert_encoding($rowData[0],"UTF-8","Shift_JIS");
				$wMail = $cObj->sanitize($wMail,"UTF-8");
				$egpObj->setEmail($wMail);
				
				$entF="1"; // エントリーフラグ=1
			}else{
				// id
				$egpObj->setId($rArr['id']);
				
				// Email
				$egpObj->setEmail($rArr['email']);
			}
			
			// Password
			$wrk = mb_convert_encoding($rowData[1],"UTF-8","Shift_JIS");
			$wrk = $cObj->sanitize($wrk,"UTF-8");
			$egpObj->setPassword($wrk);
			
			// 名前
			$wrk = mb_convert_encoding($rowData[2],"UTF-8","Shift_JIS");
			$wrk = $cObj->sanitize($wrk,"UTF-8");
			$egpObj->setName($wrk);
			
			// よみ
			$wrk=mb_convert_encoding($rowData[3],"UTF-8","Shift_JIS");
			$wrk = $cObj->sanitize($wrk,"UTF-8");
			if($wrk == null || $wrk == ''){
				$wrk = '未入力';
			}
			$egpObj->setNameYomi($wrk);
			
			// 役職
			$wrk=mb_convert_encoding($rowData[4],"UTF-8","Shift_JIS");
			$wrk = $cObj->sanitize($wrk,"UTF-8");
			$egpObj->setRole($wrk);
			
			if($entF=="1"){
				// 登録
				$conn->beginTransaction();
				$egpObj->insert($conn);
				$conn->commit();
			} else{
				// 更新
				$conn->beginTransaction();
				$egpObj->update($conn);
				$conn->commit();
			}
		}
		
		return $eArr;
	}

	/*
	 * 入力チェックを行うための内部関数
	*/
	function validate($vArr, $seq){
		require_once('../Myznala/MsgBean.class.php');
		
		$i=0;
		$array = array();
		/* Email */
		// 入力必須チェック
		if($vArr[0]==null || $vArr[0]==""){
			$msgObj=new MsgBean();
			$msgObj->setMessage("行".$seq."はEmail未入力のため処理されませんでした.");
			$array[$i]=$msgObj;
			$i++;
		}
		
		/* パスワード */
		// 入力必須チェック
		if($vArr[1]==null || $vArr[1]==""){
			$msgObj=new MsgBean();
			$msgObj->setMessage("行".$seq."はパスワード未入力のため処理されませんでした.");
			$array[$i]=$msgObj;
			$i++;
		}
		
		/* 名前 */
		// 入力必須チェック
		if($vArr[2]==null || $vArr[2]==""){
			$msgObj=new MsgBean();
			$msgObj->setMessage("行".$seq."はユーザー名未入力のため処理されませんでした.");
			$array[$i]=$msgObj;
		}
		return $array;
	}

	/*
	 * 処理振り分けのための内部関数
	*/
//	function isEntry($conn, $email){
//		require('EgpusersDao.class.php');
//		
//		$obj=new EgpusersDao();
//		$rObj = $obj->findByEmail($conn,　$email);
//		return $rObj;
//	}
	
	/*
	 * ボタン初期化処理のための内部関数
	*/
	function initButton(){
		require_once('../Myznala/ButtonBean.class.php');

		$bArr=array();
		// 登録・更新
		$bObj=new ButtonBean();
		$bObj->setId("egp-my-entry-button");
		$bObj->setName("entry");
		$bObj->setSrc("../images/upload.png");
		$bObj->setAlt("アップロードの実行");
		$bArr[0]=$bObj;
		
		// 戻る
		$bObj=new ButtonBean();
		$bObj->setId("egp-my-back-button");
		$bObj->setName("back");
		$bObj->setSrc("../images/process-stop.png");
		$bObj->setAlt("戻る");
		$bArr[1]=$bObj;

		return $bArr;
	}
?>